package com.hifar.mybatisplus;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

@Mapper
public interface PublicMapper {


	Map<String, Object> selectOneBySql(@Param("sql") String sql);

	Page<Map<String, Object>> listPage(Page<Map<String, Object>> rowPage, @Param("sql") String sql,
									   @Param(Constants.WRAPPER) QueryWrapper wrapper);

	List<Map<String, Object>> selectList(@Param("sql") String sql, @Param(Constants.WRAPPER) QueryWrapper wrapper);

	Map<String, Object> selectOneById(@Param("tableName") String tableName,
									  @Param(Constants.WRAPPER) QueryWrapper wrapper);


	Map<String, Object> selectOneByIdField(@Param("selectFields") String selectFields,
										   @Param("tableName") String tableName, @Param(Constants.WRAPPER) QueryWrapper wrapper);

	List<Map<String, Object>> selectListField(@Param("selectFields") String selectFields,
											  @Param("tableName") String tableName, @Param(Constants.WRAPPER) QueryWrapper wrapper);

	void insert(@Param("tableName") String tableName, @Param("list") List<MetaField> list);


	void update(@Param("tableName") String tableName, @Param(Constants.WRAPPER) QueryWrapper wrapper,
				@Param("list") List<MetaField> list);

	void delete(@Param("tableName") String tableName, @Param(Constants.WRAPPER) QueryWrapper wrapper);

	/**
	 * 查询mysql表是否存在
	 *
	 * @param schemaName 模式名/数据库名
	 * @param tableName  表名
	 * @return
	 */
	int queryMysqlTable(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

	/**
	 * 查询达梦表是否存在
	 *
	 * @param schemaName 模式名/数据库名
	 * @param tableName  表名
	 * @return
	 */
	int queryDmTable(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

	/**
	 * 执行sql
	 *
	 * @param sql
	 */
	void executeSql(@Param("sql") String sql);

	/**
	 * 查询人大金仓表是否存在
	 *
	 * @param schemaName 模式名/数据库名
	 * @param tableName  表名
	 * @return
	 */
	int queryKingBaseTable(@Param("schemaName") String schemaName, @Param("tableName") String tableName);

	/**
	 * 查询表数据是否存在
	 *
	 * @param tableName 表名称
	 * @param id        数据id
	 * @return
	 */
	int queryExist(@Param("tableName") String tableName, @Param("id") String id);

	/**
	 * 插入一条数据
	 *
	 * @param tableName
	 * @param dataMap
	 */
	void insertFromMap(@Param("tableName") String tableName,
					   @Param("dataMap") Map<String, Object> dataMap);

	/**
	 * 根据id修改数据
	 *
	 * @param tableName 表名称
	 * @param dataMap   表数据
	 * @param id        数据id
	 */
	void updateFromMapById(@Param("tableName") String tableName,
						   @Param("dataMap") Map<String, Object> dataMap,
						   @Param("id") String id);

}
